home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
guilib3
/
inc
/
event.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-30
|
11KB
|
321 lines
/* :*****************************************************************
: "event.h" : system“Pride”イベント・ライブラリ
:*****************************************************************
*/
#ifndef _EVENT_H
#define _EVENT_H
#include <time.h>
#ifndef _GUIDEFS_H
# include "guidefs.h"
#endif
#define EVT_CANCEL (-1)
#define EVT_BREAK (-2)
typedef struct _evtkeycmd_t
{
struct _evtkeycmd_t *next;
USHORT ec1; /* キーコード#1 */
SHORT ec2; /* キーコード#2 */
int cmd; /* コマンドNo. */
int (*func)();
void *ptr;
CONST char *msg;
} EVTKEYCMD_T;
#define EVTKEY_HASH_MAX (16)
typedef struct
{
EVTKEYCMD_T *key[EVTKEY_HASH_MAX]; /* 1ストロークタイプ */
EVTKEYCMD_T *pfx[EVTKEY_HASH_MAX]; /* 2ストロークタイプ */
} EVTKEYTBL_T;
typedef struct _evtsbj_t
{
int no; /* イベントNo */
int page; /* 書き込みページ */
int typ; /* イベントタイプ(マウス or キー) */
int (*func)(int,struct _evtsbj_t *);
/* イベント処理関数 */
void *ptr; /* 汎用パラメータポインタ */
union
{ struct /* マウスイベント */
{ UCHAR attr; /* 属性 */
UCHAR btn; /* ボタン */
FRAME fr; /* 座標 */
} mos;
struct /* キーイベント */
{ UCHAR attr; /* 属性 */
USHORT ec; /* キーアドレス */
USHORT ch; /* キャラクターコード */
} key;
EVTKEYTBL_T *keyTbl; /* キーテーブル */
} ev;
} EVTSBJ_T;
#define EVT_SBJ EVTSBJ_T
typedef struct _evt_t
{
struct _evt_t *back;
struct _evt_t *next;
int n;
EVTSBJ_T *sbj;
} EVT_T;
#define EVT_WORK EVT_T
/*------------------------------------------------------------------*/
/* イベント種別 */
/*------------------------------------------------------------------*/
#define EVTYPE_OFF (0) /* OFF */
#define EVTYPE_KEY (1) /* キーイベント */
#define EVTYPE_MOUSE (2) /* マウスイベント */
#define EVTYPE_MOS2 (3) /* page 0 用マウスイベント */
#define EVTYPE_KEYTBL (4) /* キーテーブル用 */
/*------------------------------------------------------------------*/
/* イベント抑制 */
/*------------------------------------------------------------------*/
#define EVTIGN_MOUSE (1) /* マウスイベント禁止 */
#define EVTIGN_KEY (2) /* キーイベント禁止 */
/*------------------------------------------------------------------*/
/* キーイベント用 */
/*------------------------------------------------------------------*/
#define KEYEVT_ADR (0) /* キーアドレスが一致 */
#define KEYEVT_SHIFT (1) /* キーアドレス&シフト状態 */
#define KEYEVT_ISCHA (0x10) /* 一般文字 */
#define KEYEVT_ISCTRL (0x11) /* コントール */
#define KEYEVT_ISDIGIT (0x12) /* 数値 */
#define KEYEVT_ISALPHA (0x13) /* アルファベット */
/*------------------------------------------------------------------*/
/* マウスイベント用 */
/*------------------------------------------------------------------*/
#define BTN_LEFT (1)
#define BTN_RIGHT (2)
#define MOSEVT_BTN (0x01) /* ボタンタイプ */
#define MOSEVT_NOT (0x02) /* ボタン反転タイプ */
#define MOSEVT_NOACT (0x03) /* ボタン選択アクションなし */
#define MOSEVT_AREA (0x04) /* 指定エリア */
#define MOSEVT_OUTAREA (0x05) /* 指定エリア外 */
#define MOSEVT_BTNOLY (0x06) /* ボタンが押された場合 */
#define MOSEVT_MOVE (0x07) /* カーソルに移動があった場合 */
#define MOSEVT_OUTBTN (0x08) /* 範囲外でボタンON */
#define MOSEVT_REPEAT (0x10) /* リピートタイプ(ボタン) */
#define MOSEVT_QUICK (0x10) /* クイックタイプ(リピートと同じ) */
/*------------------------------------------------------------------*/
/* アイドリング処理用 */
/*------------------------------------------------------------------*/
typedef struct _idl_t /* アイドリング処理構造体 */
{ struct _idl_t *next;
struct _idl_t *back;
int ignore;
clock_t clk; /* インターバル */
clock_t last_clk; /* ワーク */
void (*func)(clock_t);
void *ptr;
char *name; /* メッセージ */
} IDL_T;
#define EVT_IDL_MAX_CLOCK (24*60*60*CLOCKS_PER_SEC)
#define EVT_IDL_CLOCK() (clock()%EVT_IDL_MAX_CLOCK)
/* "evtidl01.c" ------------------------------------------------*/
extern IDL_T *EVT_idl_set( IDL_T *basIdl, UINT clk, void (*func)(clock_t));
/* "evtidl02.c" ------------------------------------------------*/
extern void EVT_idl_unset( IDL_T *idl );
/* "evtidl03.c" ------------------------------------------------*/
extern void EVT_idl_start( IDL_T *idl );
/* "evtidl04.c" ------------------------------------------------*/
extern void EVT_idl_stop( IDL_T *idl );
/* "evtidl10.c" ------------------------------------------------*/
extern void EVT_idl(void);
/* "evt010.c" ------------------------------------------------*/
extern EVT_T *EVT_alloc( EVT_T *basEvt, int n );
/* "evt011.c" ------------------------------------------------*/
extern void EVT_free( EVT_T *evt );
/* "evt012.c" ------------------------------------------------*/
extern void EVT_freeAll( EVT_T *evt );
/* "evt013.c" ------------------------------------------------*/
extern int EVT_link( EVT_T *evt1, EVT_T *evt2 );
/* "evt014.c" ------------------------------------------------*/
extern int EVT_unlink( EVT_T *evt1, EVT_T *evt2 );
/* "evt015.c" ------------------------------------------------*/
extern void EVT_unset( EVT_T *evt, int evt_no );
/* "evt016.c" ------------------------------------------------*/
extern int EVT_pointMove ( EVT_T *evt, int page, int newX, int newY, int oldX, int oldY );
/* "evt020.c" ------------------------------------------------*/
typedef struct
{
int evtPos;
int evtNo;
int page;
int attr;
int btn;
FRAME fr;
int (*func)(int,EVTSBJ_T *);
void *ptr;
} EVTSETMOS_T;
extern int EVT_setMos( EVT_T *evt, EVTSETMOS_T *para );
#define _EVT_SETMOS(_evt,_evtPos,_evtNo,_attr,_btn,_x1,_y1,_x2,_y2,_func,_ptr) { \
EVTSETMOS_T _para = \
{ (_evtPos), \
(_evtNo), \
DspCtrl.writePage, \
(_attr), \
(_btn), \
{(_x1),(_y1),(_x2),(_y2) }, \
(int (*)(int, EVTSBJ_T *))(_func), \
(_ptr) \
}; \
EVT_setMos( (_evt), &_para ); \
}
#define _EVT_SETMOS_FR(_evt,_evtPos,_evtNo,_attr,_btn,_fr,_func,_ptr) { \
EVTSETMOS_T _para = \
{ (_evtPos), \
(_evtNo), \
DspCtrl.writePage, \
(_attr), \
(_btn), \
{(_fr)->x1,(_fr)->y1,(_fr)->x2,(_fr)->y2 }, \
(int (*)(int, EVTSBJ_T *))(_func), \
(_ptr) \
}; \
EVT_setMos( (_evt), &_para ); \
}
/* "evt021.c" ------------------------------------------------*/
extern int EVT_set_mos( EVT_T *evt, int evtPos, int evtNo, int attr, int btn,
int x1, int y1, int x2, int y2,
int (*func)(int,EVTSBJ_T *), void *ptr );
/* "evt022.c" ------------------------------------------------*/
extern int EVT_set_mos2( EVT_T *evt, int evt_no, int no, int attr, int btn,
int x1, int y1, int x2, int y2,
int (*func)(int,EVTSBJ_T *), void *ptr );
/* "evt023.c" ------------------------------------------------*/
extern void EVT_mos_waitBO(void);
/* "evt024.c" ------------------------------------------------*/
extern size_t EvtMosDoubleClickClock;
extern int EVT_mos_clickCheck( EVTSBJ_T *sbj );
/* "evt030.c" ------------------------------------------------*/
typedef struct
{
int evtPos;
int evtNo;
int page;
int attr;
UINT ch;
UINT ec;
int (*func)(int,EVTSBJ_T *);
void *ptr;
} EVTSETKEY_T;
extern int EVT_setKey( EVT_T *evt, EVTSETKEY_T *para );
#define _EVT_SETKEY(_evt,_evtPos,_evtNo,_attr,_ch,_ec,_func,_ptr) { \
EVTSETKEY_T _para = \
{ (_evtPos), \
(_evtNo), \
DspCtrl.writePage, \
(_attr), \
(_ch), \
(_ec), \
(int (*)(int,EVTSBJ_T *))(_func), \
(_ptr) \
}; \
EVT_setKey((_evt), &_para ); \
}
/* "evt031.c" ------------------------------------------------*/
extern int EVT_set_key( EVT_T *evt, int evtPos, int evtNo, int attr,
int ch, UINT ec, int (*func)(int,EVTSBJ_T *), void *ptr );
/* "evt040.c" ------------------------------------------------*/
extern int EVT_chk( EVT_T *rootEvt, UINT evtFlag );
/* "evt041.c" ------------------------------------------------*/
extern int EVT_chkCall( EVT_T *rootEvt, UINT evtFlag, void (*func)(EVTSBJ_T *,int,void *), void *ptr );
/* "evt042.c" ------------------------------------------------*/
extern int EVT_send_key( EVT_T *rootEvt, int ch, UINT ec );
/* "evtmsk.c" ------------------------------------------------*/
extern void EVT_setMosMaskArea( int x1, int y1, int x2, int y2 );
extern void EVT_clearMosMaskArea(void);
/* キーテーブル ================================================*/
extern int EVT_set_keyTbl( EVT_T *, int, int, EVTKEYTBL_T *, int (*)(int,EVTSBJ_T *), void *);
extern EVTKEYCMD_T *EVT_keyTbl_getKey( EVTKEYTBL_T *, UINT);
extern int EVT_keyTbl_setKey( EVTKEYTBL_T *, UINT, int, int (*)(), CONST char *);
extern EVTKEYCMD_T *EVT_keyTbl_getPfx( EVTKEYTBL_T *, UINT, UINT);
extern int EVT_keyTbl_setPfx( EVTKEYTBL_T *, UINT, UINT, int, int (*)(), CONST char *);
/* "evtrec.c" ------------------------------------------------*/
typedef struct
{ UCHAR cnt; /* カウント */
UCHAR p0;
USHORT p1, p2;
} EVT_BUF;
typedef struct
{ int len;
int crt;
EVT_BUF *ebuf;
char p[1];
} EVT_PLY;
#define SIZEOF_EVTPLY(evtPly) (sizeof(EVT_PLY)+(((evtPly)->len) * sizeof(EVT_BUF)))
#define EVT_COPYPLY(toPly,fromPly) {memcpy(toPly,fromPly,SIZEOF_EVTPLY(fromPly));(toPly)->ebuf = (EVT_BUF *)((toPly)->p);}
#define EVTREC_ATT_KEY (1)
#define EVTREC_ATT_MOS (2)
#define EVTREQ_OFF (0)
#define EVTREQ_REC_START (1) /* ログ保存開始 */
#define EVTREQ_REC (2)
#define EVTREQ_PLAY_START (3) /* ログ再生開始 */
#define EVTREQ_PLAY (4)
#define EVTREQ_END (5) /* 記録/再生終了 */
#define EVTREQ_OVER (9) /* エラー */
extern int EvtReq;
extern int EVT_recStart(int att);
extern EVT_PLY *EVT_recEnd(void);
extern int EVT_recStop(void);
extern int EVT_playStart( EVT_PLY *eply );
extern int EVT_mos_pget( int *x, int *y);
extern int EVT_getkey( UINT *ec );
extern int EVT_kbhit(void);
#endif